package initrouter

import (
	"go-web/handler/article"
	"go-web/handler/user"
	"go-web/middleware"
	"net/http"
	"time"

	"github.com/gin-gonic/gin"
	swaggerFiles "github.com/swaggo/files"
	ginSwagger "github.com/swaggo/gin-swagger"
)

// SetupRouter 注册路由
func SetupRouter() *gin.Engine {
	// engine 的生成和使用过程
	// r := gin.Default()

	// console color
	gin.DisableConsoleColor()

	// 生成 Router 实例
	r := gin.New()
	// 全局中间件： 添加自定义的 logger 中间件, 通过 router.Use() 方法加入中间件
	r.Use(middleware.Logger(), middleware.LoggerToFile(), gin.Recovery())

	// 模板渲染: LoadHTMLGlob 使用 templates/ 下的模板
	// 根据 mode 加载不同的路径
	// if mode := gin.Mode(); mode == gin.TestMode {
	// 	r.LoadHTMLGlob("./../templates/*")
	// } else {
	// 	r.LoadHTMLGlob("templates/*")
	// }

	// // static 静态文件的加载, 指定 /statics 路由映射到 ./statics 文件目录，可以映射图片等资源
	// r.Static("/statics", "./statics")
	// // 和 static 差不多
	// r.StaticFS("/avatar", http.Dir(utils.RootPath()+"avatar/"))

	// // 指定 .ico 图片
	// r.StaticFile("/favicon.ico", "./favicon.ico")

	/*
		用户 User: 注册和登录
			1. 添加 Jwt 授权
			2. 路由上的中间件--auth()
	*/
	r.GET("/", middleware.JwtAuth(), func(context *gin.Context) {
		context.JSON(http.StatusOK, time.Now().Unix())
	})
	r.GET("/login", user.CreateJwt)
	r.POST("/register", user.Register)

	/*
		路由分组
			1. 相同逻辑的代码集中处理
			2. 代码提供相同的路由前缀
	*/
	// article 文章接口
	articleRouter := r.Group("/kol")
	{
		// 添加一篇文章
		articleRouter.POST("/article", article.Insert)
		// 所有文章
		articleRouter.GET("/articles", article.GetAll)
		// 获取一篇文章
		articleRouter.GET("/article/:id", article.GetByID)
		// 删除文章
		articleRouter.DELETE("/article/:id", article.DeleteByID)
	}

	/* swagger 配置 */
	url := ginSwagger.URL("http:localhost:8010/swagger/doc.json")
	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url))

	return r
}
